package com.pos.app.entity;

import android.os.Parcel;
import android.os.Parcelable;

import com.pos.app.util.db.annotation.MyColumn;
import com.pos.app.util.db.annotation.MyPrimaryKey;
import com.pos.app.util.db.annotation.MyTableName;
import com.pos.app.util.db.annotation.MyTransient;

/**
 * intent可以携带传递Parcel数据，需要实现三个方法 . 
 * 1、describeContents()返回0就可以.
 * 2、将需要的数据写入Parcel中，框架调用这个方法传递数据. 
 * 3、重写外部类反序列化该类时调用的方法.
 * 
 * Parcel的使用：实现Parcelable接口，通过writeToParcel将你的对象映射成Parcel对象，
 * 再通过createFromParcel将Parcel对象映射成你的对象。
 * 也可以将Parcel看成是一个流，通过writeToParcel把对象写到流里面，在通过createFromParcel从流里读取对象，
 * 只不过这个过程需要你来实现，因此写的顺序和读的顺序必须一致。
 */
@MyTableName(name = "T_SYS_USER")
public class User implements Parcelable
{

	/**
	 * 将user保存在intent中时的key
	 */
	@MyTransient
	public static final String userKey = "lovesong_user";
	@MyPrimaryKey(autoIncrement = true)
	int auto;

	private String id; // 唯一标识ID

	@MyColumn(name = "username")
	private String name; // 用户名
	private String password;//密码
	private String status;// 状态
	private boolean available;

	public String getId()
	{
		return id;
	}

	public void setId(String id)
	{
		this.id = id;
	}

	public String getName()
	{
		return name;
	}

	public void setName(String name)
	{
		this.name = name;
	}

	public String getStatus()
	{
		return status;
	}

	public void setStatus(String status)
	{
		this.status = status;
	}

	public boolean isAvailable()
	{
		return available;
	}

	public void setAvailable(boolean available)
	{
		this.available = available;
	}

	// 内容描述接口，基本不用管
	@Override
	public int describeContents()
	{
		return 0;
	}

	// 写入接口函数，打包
	@Override
	public void writeToParcel(Parcel dest, int flags)
	{
		// 写的顺序和读的顺序必须一致
		dest.writeString(id);
		dest.writeString(name);
		dest.writeString(status);
		dest.writeInt(available ? 1 : 0);
	}

	public String getPassword()
	{
		return password;
	}

	public void setPassword(String password)
	{
		this.password = password;
	}

	// 读取接口，目的是要从Parcel中构造一个实现了Parcelable的类的实例处理。因为实现类在这里还是不可知的，所以需要用到模板的方式，继承类名通过模板参数传入
	// 为了能够实现模板参数的传入，这里定义Creator嵌入接口,内含两个接口函数分别返回单个和多个继承类实例
	public static final Parcelable.Creator<User> CREATOR = new Parcelable.Creator<User>()
	{

		@Override
		public User createFromParcel(Parcel source)
		{
			User u = new User();
			u.id = source.readString();
			u.name = source.readString();
			u.status = source.readString();
			u.available = source.readInt() == 1 ? true : false;
			return u;
		}

		@Override
		public User[] newArray(int size)
		{
			return new User[size];
		}

	};
}